import http from "wechat-http";

http.baseURL = 'https://live-api.itheima.net'

http.intercept.request = (config) => {
  // console.log('请求相关信息', config);
  // 获取token
  const token = getApp().token
  // 如果config.url中包含/refreshToken，则不进入；不包含则进入
  if (token && !config.url.includes('/refreshToken')) {
    // 如果请求头header中有header，就用自己的header，没有就赋值{}，这样执行token添加到请求头时就不会报错
    config.header = config.header || {}
    // 请求头添加token
    config.header.Authorization = token
  }
  return config
}
// 解套
http.intercept.response = async (res) => {
  // console.log('响应', res);
  if (res.statusCode === 401) {
    // 如果config.url中包含/refreshToken,则不进入,刷新token
    if (res.config.url.includes('/refreshToken')) {
      // 获取页面历史记录
      const pageStack = getCurrentPages()
      // 获取当前页面路由信息
      const currentPage = pageStack[pageStack.length - 1]
      // 如果选择navigateTo点击返回会再次显示当前页面，因为当时是点击这个页面到登陆页面的，为了优化这个功能，所以使用redirectTo
      // wx.navigateTo({
      //   url: `/pages/login/index=/${currentPage.route}`
      // })
      wx.redirectTo({
        url: `/pages/login/index?returnUrl=/${currentPage.route}`
      })
      return res.data
    }
    // 如果接口没有refreshToken，就没必要刷新
    if (!getApp().refreshToken) return
    // 传参需要传入请求头，只能直接调用
    const { code, data } = await wx.http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: getApp().refreshToken
      }
    })
    if (code !== 10000) return wx.utils.toast()
    // console.log('刷新refreshToken', data);
    getApp().setToken(data.token, data.refreshToken)
    // 重新调用之前的401接口，拿到正确的数据并返回
    const result = await wx.http({
      ...res.config
    })
    return result
  }
  return res.data
}

wx.http = http